[新機能]Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになり、外部サービス連携用のユーザーを区別出来るようになりました
さがらです。
先日のSnowflake 8.26のリリースノートで、Snowflakeのユーザーに対して「TYPE」propertyが追加されました。
この「TYPE」propertyについて、本記事でまとめてみます。
「TYPE」propertyとは
まず、「TYPE」propertyですが、USERオブジェクトに紐づく新しいオプションのプロパティとなります。
上記のドキュメントによると、PERSON
、SERVICE
、LEGACY_SERVICE
、NULL
の4つが選択出来るようです。デフォルト値はNULL
です。
PERSON
- ユーザーのログイン方法や設定に特に制限はない。(これまでと変わらないSnowflakeユーザーと同じ扱い)
NULL
PERSON
と同じ挙動となる。(これまでと変わらないSnowflakeユーザーと同じ扱い)
SERVICE
- パスワードやSAML SSOを用いて、ログインが不可能となる
- MFAの設定も不可能であり、authentication policyによるMFAの強制からも除外される
FIRST_NAME
、MIDDLE_NAME
、LAST_NAME
、PASSWORD
、MUST_CHANGE_PASSWORD
、MINS_TO_BYPASS_MFA
の設定が不可能
LEGACY_SERVICE
SERVICE
と異なり、パスワードまたはSAML SSOを用いてログインが可能- MFAの設定も不可能であり(後述する相樂の検証範囲では)、authentication policyによるMFAの強制からも除外される
この情報を踏まえると、基本的には以下の使い分けが良いと感じました。
PERSON
- 実際にSnowsightにログインして操作する人間に割り当てるユーザー
SERVICE
- dbt CloudやFivetranなどのSnowflake外のサービスからの認証や、自社製のアプリからの認証に使用するユーザー
LEGACY_SERVICE
- パスワード認証しか対応していない外部サービスからの認証に使用するユーザー。authentication policyによるMFAの強制から除外されてしまうがパスワードで認証できるユーザーとなるため、特別な事情がない限りは
LEGACY_SERVICE
のユーザーは非推奨です
- パスワード認証しか対応していない外部サービスからの認証に使用するユーザー。authentication policyによるMFAの強制から除外されてしまうがパスワードで認証できるユーザーとなるため、特別な事情がない限りは
SERVICEユーザーに関する挙動を確かめてみた
TYPEがSERVICE
のユーザーに関する挙動を確かめてみます。
まず、以下のようにpassword
も含むcreate user
コマンドを実行すると、エラーとなります。これにより、パスワードでの認証が絶対にできないユーザーを作成可能です。
create user sagara_service
type = service
password = '<任意のパスワード>'
default_role = public;
以下のようにpassword
など、TYPEがSERVICE
のときに利用できないオプションを含まないようにすると、無事にユーザーを作ることができます。
create user sagara_service
type = service
default_role = public;
Userから確認すると、TYPE
は一覧に表示されないようです。対象ユーザーの詳細画面でも、TYPE
は確認できませんでした。(個人的にはこのユーザー一覧でも各ユーザーの詳細画面でも、TYPEがわかるようにしてほしいですね)
LEGACY_SERVICEユーザーに関する挙動を確かめてみた
TYPEがLEGACY_SERVICE
のユーザーに関する挙動を確かめてみます。
まず、以下のようにpassword
も含むcreate user
コマンドを実行すると、SERVICE
のときと変わりユーザーの作成ができます。
create user sagara_legacy_service
type = legacy_service
password = '<任意のパスワード>'
default_role = public;
ドキュメント上に明記がなかったMFAの設定がTYPEがLEGACY_SERVICE
のユーザーに設定できるかどうかを試してみます。対象のLEGACY_SERVICE
のユーザーでログインしてMFAの設定を進めようとすると、MFAの設定の最後でエラーが起きました。私が検証した範囲では、LEGACY_SERVICE
のユーザーに対してMFAの設定ができませんでした。
最後に
Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになったので、内容をまとめたうえで動作検証もしてみました。
MFAのポリシーは適用したうえで、外部サービス連携用のユーザーはTYPESERVICE
で作るとセキュアなユーザー管理になると思います。ぜひご活用ください!